(function() {


    tinymce.create('tinymce.plugins.CodeFormat', {

        /**
        * Initializes the plugin, this will be executed after the plugin has been created.
        * This call is done before the editor instance has finished it's initialization so use the onInit event
        * of the editor instance to intercept that event.
        *
        * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
        * @param {string} url Absolute URL to where the plugin is located.
        */
        init: function(a, b) {
            var c = this;
            c.editor = a;

            a.addButton("codeformat",
            {
                title: 'Format Code',
                image: '../images/ico.gif',
                cmd: 'cmdCodeFormat'
            });

            a.addCommand('cmdCodeFormat', function() {
            c.editor.windowManager.open({
                file: '../codestyle.aspx',
                width: 520,
                height: 400,
                inline: 1
            });
        });

        // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
        //            a.addCommand('mceExample', function() {
        //                ed.windowManager.open({
        //                    file: url + '/dialog.htm',
        //                    width: 320 + ed.getLang('example.delta_width', 0),
        //                    height: 120 + ed.getLang('example.delta_height', 0),
        //                    inline: 1
        //                }, {
        //                    plugin_url: url, // Plugin absolute URL
        //                    some_custom_arg: 'custom arg' // Custom argument
        //                });
        //            });

        // Register example button
        //            ed.addButton('example', {
        //                title: 'example.desc',
        //                cmd: 'mceExample',
        //                image: url + '/img/ico.png'
        //            });

        // Add a node change handler, selects the button in the UI when a image is selected
        //            ed.onNodeChange.add(function(ed, cm, n) {
        //                cm.setActive('example', n.nodeName == 'IMG');
        //            });
    },

    /**
    * Creates control instances based in the incomming name. This method is normally not
    * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
    * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
    * method can be used to create those.
    *
    * @param {String} n Name of the control to create.
    * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
    * @return {tinymce.ui.Control} New control instance or null if no control was created.
    */
    createControl: function(n, cm) {
        return null;
    },

    /**
    * Returns information about the plugin as a name/value array.
    * The current keys are longname, author, authorurl, infourl and version.
    *
    * @return {Object} Name/value array containing information about the plugin.
    */
    getInfo: function() {
        return {
            longname: 'Example plugin',
            author: 'Some author',
            authorurl: 'http://tinymce.moxiecode.com',
            infourl: 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
            version: "1.0"
        };
    }
});

// Register plugin
tinymce.PluginManager.add('codeformat', tinymce.plugins.CodeFormat);
})();
